Computer technology continues to advance at a rapid pace, with significant developments being made in both software and in the underlying hardware upon which such software executes. One significant advance in computer technology is the development of multi-processor computers, where multiple computer processors are interfaced with one another to permit multiple operations to be performed concurrently, thus improving the overall performance of such computers. Also, a number of multi-processor computer designs rely on logical partitioning to allocate computer resources to further enhance the performance of multiple concurrent tasks.
With logical partitioning, a single physical computer is permitted to operate essentially like multiple and independent "virtual" computers (referred to as logical partitions), with the various resources in the physical computer (e.g., processors, memory, input/output devices) allocated among the various logical partitions. Each logical partition executes a separate operating system, and from the perspective of users and of the software applications executing on the logical partition, operates as a fully independent computer.
A shared resource, often referred to as a "hypervisor" or partition manager, manages the logical partitions and facilitates the allocation of resources to different logical partitions. As a component of this function, a partition manager maintains separate virtual memory address spaces for the various logical partitions so that the memory utilized by each logical partition is fully independent of the other logical partitions. One or more address translation tables are typically used by a partition manager to map addresses from each virtual address space to different addresses in the physical, or real, address space of the computer. Then, whenever a logical partition attempts to access a particular virtual address, the partition manager translates the virtual address to a real address so that the shared memory can be accessed directly by the logical partition.
An important design rule that is enforced in most logically-partitioned computers is that the virtual address space of each logical partition is completely inaccessible to other logical partitions. Strict policies are enforced by the partition manager to limit access to the virtual addresses within a logical partition's address space to only that logical partition. Furthermore, logical partitions are not permitted to access memory using real addresses so that a logical partition is not able to corrupt the memory of another partition by using a real address that it does not own. By doing so, each logical partition is better able to emulate a separate physical computer, and applications that are originally designed for a non-partitioned computer are often able to execute within a logical partition without modification or customization.
An undesirable side effect of the strict memory access rules, however, is that communication between logical partitions is typically very restricted. Since each logical partition operates as if it were a separate physical computer, typically the only form of inter-partition communication is via a conventional network interface, in much the same manner as any computer would utilize to communicate with another physical computer on a network. To implement such an interface, often each logical partition is assigned a separate network adaptor resource in the computer, and the actual communication passes from one network adaptor on the physical computer, over an external network to which both network adaptors are connected, and back to the other network adaptor on the computer. Communications in this manner can be relatively slow and cumbersome, and typically relatively expensive, at least as compared to internal communications within the processing core of a computer.
Therefore, a significant need exists in the art for an improved manner of permitting communication between the logical partitions within a computer, while still conforming to the memory access controls that maintain the independence of each logical partition.